【新機能】Amazon LexがGA(一般利用開始)に!Slackに入れて使ってみた
春暖の候, 春風の心地よい季節になりましたが、お変わりなくお過ごしでしょうか、せーのです。さて、本日4月20日(現地時間19日)に待ちに待ったAmazon Lexの正式ローンチが発表されました!今日はプレビュー版から色々変わった点をご紹介します。
新機能たくさん!
Lexは昨年のRe:Invent2016に発表された対話式Botインターフェースのサービスです。Deep Learningが組み込まれていて自然な会話を通じてユーザを自然に誘導します。基本的な機能はプレビュー版のこちらの記事を参考にして下さい。
Amazon Lexのプレビューが通ったので使ってみた|クラスメソッドブログ
GAとして正式リリースされたAmazon Lexはプレビュー版から色々と新しい機能が追加されています。ざっとご紹介いたしましょう。
Slack連携
プレビュー時点ではFacebook Messengerとの連携がサポートされていましたが、それに加えてSlackがサポートされました。Slackから自然にLexを使ってBotを組み込むことができます。
Twilio連携
Twilioとの連携ではTwilioのSMSを通じてLexのBotと会話することができるようになります。
SDK
AWS SDKでLexの操作ができるようになっています。言語はiOS、Android、Java、JavaScript、Python、.Net、Ruby、PHP、Go、C++が用意されています。
テストでの音声入力
テストコンソールにマイクボタンがつきました。
会話内容のモニタリング
音声にて会話をすると「聞き取れていない」「聞き取れたが理解できなかった」ということがよくあります。モニタリングにそれらの会話が記録されるので、聞き取りにくかった会話を新たにSample Utteranceに追加する、というような運用が可能になりました。またCloud Watchのメトリクスに発話が認識されなかった文章(テキストの投稿)、発話が認識されなかった文章(音声の投稿)、発話が認識されなかった発言が蓄積されるようになりました。
このように様々な新機能が加わって使いやすく、便利になったAmazon Lex、さっそく触ってみましょう。今回は「Slackとの連携」を試してみます。
やってみた
それでは早速やってみましょう。今回はサンプルの「OrderFlowers(花を注文する)」をSlackで使えるようにしたいと思います。
Amazon Lexの構築
まずLexの構築を行います。サンプルは全て用意されていますのでボタンを押していくだけで構築ができてしまいます。マネージメントコンソールからLexを開きます。Lexは現在バージニアリージョンのみしかリリースされていないので注意しましょう。
Createボタンを押下してBotを作成していきます。
サンプルから[OrderFlowers]を選択します。
R13のチェックがあるので[No]を選択します。ちなみにIAMはプレビュー版では自分で作っていたのですがGA版では自動で作ってくれるようになりました。便利ですね。あとは[create]ボタンを押します。
細かいSample UtteranceやSlotの設定をします。サンプルでは既に設定されているのでそのままいってもOKです。詳細はプレビュー版の記事を参考にしてください。
少しSampleを足してみましょう。Bot名の横のトグルボタンから「Latest」を選択すると編集画面に変わります。
いきなり花の種類を指定するパターンのサンプルを書いてみます。I would like to order {FlowerType}と入力すると{FlowerType}の部分が青くハイライトされます。GA版ではSlotに当たる部分が色分けされていてとてもわかりやすくなりました。
画面下の[Save]ボタンで保存、右上の[Build]ボタンでビルドします。その後[Publish]ボタンで公開してみましょう。
[Publish]ボタンを押下するとaliasの名前を入れる画面が出てくるのでいい感じの名前を入れます。
しばらく待つとPublishが完了します。これでLexの構築は完了です。
次にSlackの設定に移ります。
Slack APIの設定
次はSlackの設定です。まずは新規に一つTeamを作ります。
つぎにAPIコンソールを開き[Start Buildings]をクリックします。
アプリの名前をつけ、先程作ったTeamを選択し[Create App]ボタンを押します。
アプリが作成されるとこのような画面になります。
下の方にある[BotUser]ナビを選択し、新しいユーザー名を入力、[Always Show My Bot as Online]をチェックしてBotユーザーを作成します。
[Interactive Message]ナビを選択し、とりあえず適当なURLを[Request URL]に入れておきます。このURLは後で更新します。
Saveすると下の[App Credentials]という部分にClientID、Client Secret, Verification Tokenがそれぞれ表示されます。こちらをコピーしておきましょう。
これでSlackの設定は完了です。いよいよ連携していきます。
連携する
それではLexとSlackを連携していきましょう。先程つくったLexのBotを選択し[Channels]タブをクリックします。上の画面のままにしている方は[Go to Channels]をクリックします。
Channel設定画面から[Slack]ナビを選択し、任意の名前、説明、KMSのKey(aws/lexを選択)、上でPublish時につけたAliasを選択します。KMSのKeyが出てこない方は一旦別の画面に移ってから改めてLexに入り直すと出てきたりします。
先程のSlack APIにて表示されていたClient ID, Client Secret Verification Tokenをそれぞれ入力して[Activate]ボタンをクリックします。
Activateが完了するとCallbackとして[Postback URL]と[OAuth URL]という2つのURLが表示されます。Postback URLはSlackからのイベントが送られる先のURL、OAuth URLはSlackからLexを使う際の認証に使うエンドポイントとなります。
Slack APIの設定画面に戻って最後の仕上げに入ります。[OAuth & Permittions]ナビを選択し、Lexで表示されていたOAuth URLを入力します。Add⇒Saveとそれぞれボタンを押していきます。
下部にある[Permission Scope]でchat:write:botを選択し、ボットの書き込みを許可します。
[Interactive Message]ナビをクリックし、[Request URL]をLexで表示されたPostback URLに更新します。
[Event Subscription]ナビをクリックし[Request URL]にLexで表示されたPostback URLを入力します。
下部にある[Subscribe Team Events]にこれらの権限を付与します。
- message.channels
- message.groups
- message.im
- message.mpim
ここまでの連携設定が完了すると[Manage Distribution]の所に[Sharable URL]というものが表示されます。こちらをコピーします。
このURLをブラウザに貼り付けるとアプリをTeamで使うためのAuthorize画面が出てきますので、Authorizeボタンを押して認可します。
これですべての設定が完了です!
テスト
それではテストしてみましょう。作ったSlackのTeamを開いて#generalチャンネルにSlack APIで作ったBotを招待します。
あとは直接#generalチャンネルでSample Utteranceに該当することをつぶやくだけでBotがLEXを通じて応答してくれます。
成功です!
まとめ
いかがでしたでしょうか。この世界はとても深いですが、使いこなすと世界がかなり広がります。まずは色々触ってみてDeep Learningを使ったBotの世界にハマってみましょう!!